# -*- coding: utf-8 -*-            
# @Time : 2022/12/27 16:03
# @Author  : lining
# @FileName: 递归.py
"""
https://leetcode.cn/problems/subsets/
给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
输入：nums = [1,2,3]
输出：[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
在列表中append列表，会导致源列表改变，列表中的列表也改变， 可使用切片复制，也可以用deepcopy
"""
# 存放结果
result = []
# 待处理的列表
b = [1, 2, 3, 4]
def res(data, index):
    """
    :param data: 当前已经选出来的数的合集，在此结果上增加新数据
    :param index: 当前已经遍历到的索引
    :return:
    """
    if index == 4:
        # 边界值，遍历到最后一个元素，加入结果集
        result.append(data[:])
        return
    # 选这个数
    data.append(b[index])
    res(data, index+1)
    # 不选这个数
    data.pop()
    res(data, index+1)


res([], 0)
print(result)

